#include<iostream>
#include<queue>
#include<stack>
#include<string>
#include<algorithm>

using namespace std;

//stack是一种 先进后出 的数据结构，即栈,栈不允许有遍历行为
//只有一个出口栈顶top()进出数据,入栈push和出栈pop

stack<T> stk;	//构造
stack(const stack &stk);		//拷贝构造

stack& operator=(const stack &stk);	//重载等号操作符

stack.push(elem);	//入栈
stack.pop();		//出站
stack.top();		//返回栈顶元素

stack.empty();	//判空
stack.size();	//返回栈的大小


void test01()
{
	stack<int> s;

	for (int i = 0; i < 10; i++)
	{
		s.push(i * 10);
	}
	cout << "栈的大小为: " << s.size() << endl;

	while (!s.empty())
	{
		cout << "栈顶元素为: " << s.top() << endl;
		s.pop();
	}

	cout << "栈的大小为: " << s.size() << endl;
}

int main()
{
	test01();
	return 0;
}






//queue容器，队列， 先进先出， 不允许遍历行为
//有队尾back队头front两个出口，队尾只能push入队，队头只能pop出队

queue<T> que;	//构造
queue(const queue &que);		//拷贝构造

queue& operator=(const queue &que);	//重载等号操作符

queue.push(elem);	//队尾入队
queue.pop();		//队头出队
queue.back();		//返回队尾元素
queue.front();		//返回队头元素

queue.empty();	//判空
queue.size();	//返回队的大小


class Person
{
public:
	Person(string name, int age)
	{
		this->m_Age = age;
		this->m_Name = name;
	}

	string m_Name;
	int m_Age;
};

void test01()
{
	queue<Person> q;

	Person p1("张三", 19);
	Person p2("李四", 21);
	Person p3("王五", 32);
	Person p4("赵六", 24);

	//入队
	q.push(p1);
	q.push(p2);
	q.push(p3);
	q.push(p4);
	cout << "队列大小: " << q.size() << endl;

	while (!q.empty())
	{
		cout << "队头：" << "姓名：" << q.front().m_Name <<
			"\t年龄：" << q.front().m_Age << endl;
		cout << "队尾：" << "姓名：" << q.back().m_Name <<
			"\t年龄：" << q.back().m_Age << endl;
		cout << endl;
		q.pop();
	}
	cout << "队列大小: " << q.size() << endl;
}

int main()
{
	test01();
	return 0;
}




